/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.database.dao.impl;

import com.database.dao.IncidenciaDao;
import com.database.model.Incidencia;
import com.database.model.Usuario;
import com.database.util.HibernateUtil;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.hibernate.Query;
import org.hibernate.classic.Session;

/**
 *
 * @author diego y yinna
 */
public class IncidenciaDaoImplement implements IncidenciaDao {

    @Override
    public List<Incidencia> buscarTodas() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        return session.createQuery("from Incidencia inc order by inc.apertura asc").list();
    }

    @Override
    public Incidencia buscarPorId(Integer id) {
        System.err.println("EL codigo a buscar es:" + id);
        Session session = HibernateUtil.getSessionFactory().openSession();
        return (Incidencia) session.load(Incidencia.class, id);
    }

    @Override
    public void insertar(Incidencia incidencia) {
         Session session= HibernateUtil.getSessionFactory().openSession();
         FacesContext context = FacesContext.getCurrentInstance();   
         try{
             session.beginTransaction();
             session.save(incidencia);
             session.beginTransaction().commit();
             context.addMessage(null, new FacesMessage("Se ha guardado "+incidencia.getTitulo()+" con éxito!")); 
         }catch(Exception e){
             context.addMessage(null, new FacesMessage("Hubo un problema al guardar"+e.getMessage())); 
             session.beginTransaction().rollback();
         }
        
    }

    @Override
    public void actualizar(Incidencia incidencia) {
        Session session= HibernateUtil.getSessionFactory().openSession();
          FacesContext context = FacesContext.getCurrentInstance();   
         try{
             session.beginTransaction();
             session.merge(incidencia);
             session.beginTransaction().commit(); 
             context.addMessage(null, new FacesMessage("Se ha actualizado "+incidencia.getTitulo()+" con éxito!")); 
         }catch(Exception e){
             context.addMessage(null, new FacesMessage("Hubo un problema al actualizar:"+e.getMessage())); 
             session.beginTransaction().rollback();
         }
    }

    @Override
    public void eliminar(Incidencia incidencia) {
         Session session= HibernateUtil.getSessionFactory().openSession();
        FacesContext context = FacesContext.getCurrentInstance();   
         try{
             session.beginTransaction();
             session.delete(incidencia);
             session.beginTransaction().commit();
             context.addMessage(null, new FacesMessage("Se ha eliminado "+incidencia.getTitulo()+" con éxito!")); 
         }catch(Exception e){
             context.addMessage(null, new FacesMessage("Hubo un problema al eliminar: " +e.getMessage())); 
             session.beginTransaction().rollback();
         }
    }

    @Override
    public List<Incidencia> buscarTodasReportadasxUsuario(Usuario usuarioSolicitante) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        String sql = "From Incidencia  where usuarioByUsuarioSolicitante=:solicitante";
        Query query = session.createQuery(sql);
        query.setParameter("solicitante", usuarioSolicitante);
        return query.list();
    }

    @Override
    public List<Incidencia> buscarxResolverxUsuario(Usuario usuarioAsignado) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        String sql="From Incidencia where usuarioByUsuarioAsignado=:asignado and estado NOT IN  ('RESUELTA','DESHABILITADA') ";
        Query query= session.createQuery(sql);
        query.setParameter("asignado", usuarioAsignado);
        return query.list();
    }

}

